import Module from './module'
import {forEachValue} from '../utils'
class ModuleCollection {
    constructor(options) {
      // 构建父子关系用栈
      this.register([], options);
    }
    register(path, rootModule) {
      let module = new Module(rootModule)
      if (path.length == 0) { 
        this.root = module;
      }else{ // 不是根的情况    [a,c]  // [a] 找到孩子叫a的
        let parent = path.slice(0,-1).reduce((memo,current)=>{
           return memo.getChild(current); // memo._children[key]
        },this.root) ; 
        parent.addChild(path[path.length - 1],module)
        // parent._children[path[path.length - 1]] =  module; // c定义在了a的上面
      }
      if(rootModule.modules){ 
        forEachValue(rootModule.modules,(moduleName,moduleValue)=>{
          this.register(path.concat(moduleName), moduleValue);
        })
      }
    }
  }
  export default ModuleCollection